﻿using System;
using System.Windows.Forms;

namespace clasesBase
{
    public partial class FrmABM : Form
    {
        private bool soloVisualizacion = false, esEdicion = true;
        public bool SoloVisualizacion
        {
            set { this.soloVisualizacion = value; }
        }

        private bool permitirEdicion = false;
        public bool PermitirEdicion
        {
            set { this.permitirEdicion = value; }
        }

        protected int idElemento = 0;
        public int IdElemento
        {
            set { this.idElemento = value; }
        }

        public FrmABM()
        {
            InitializeComponent();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void FrmABM_Load(object sender, EventArgs e)
        {
            string titulo = "";

            // Si se abrió el formulario sólo para visualizar los datos de un elemento, entonces deshabilito los campos, cambio el título
            // y habilito en cambio, el botón para la edición.
            if (soloVisualizacion) { titulo = "Visualizar"; esEdicion = false; }
            else
            {
                esEdicion = true;
                if (this.idElemento == 0) titulo = "Nuevo";
                else titulo = "Edición";
            }

            lblAccion.Text = titulo;

            btnEditar.Enabled = !esEdicion; // Como los datos pueden editarse ya, no necesito habilitar el botón para Editar. Lo oculto.
            btnEditar.Visible = !esEdicion;
            btnGuardar.Enabled = esEdicion; // Si se pueden editar los datos, tengo que habilitar el botón Guardar

            habilitarEdicionCampos(esEdicion);

            if (!esEdicion && !permitirEdicion) btnEditar.Visible = false;
        }

        /* Si los campos están habilitados, los deshabilita. Si están deshabilitados, los habilita.
         * Si se trata de un registro nuevo, pone todos los campos en blanco. Si es una actualización, no los altera.*/
        private void habilitarEdicionCampos(bool habilitar)
        {
            foreach (Control controlHijo in this.Controls)
            {
                if ((controlHijo is TextBox) || (controlHijo is MaskedTextBox) || (controlHijo is DateTimePicker) || (controlHijo is ComboBox) || (controlHijo is CheckBox) || (controlHijo is GroupBox))
                {
                    controlHijo.Enabled = habilitar;

                    if (!esEdicion)
                    {
                        if (controlHijo is CheckBox || controlHijo is GroupBox)
                        { /* Si se trata de un CheckBox no borro su Text, sino se queda sin contenido*/
                            if (controlHijo is GroupBox)
                                foreach (Control controlNieto in controlHijo.Controls)
                                {
                                    if ((controlNieto is TextBox) || (controlNieto is MaskedTextBox) || (controlNieto is DateTimePicker) || (controlNieto is ComboBox) || (controlNieto is CheckBox))
                                        if (controlNieto is CheckBox)
                                        {
                                            ((CheckBox)controlNieto).Checked = false;
                                        }
                                        else controlNieto.Text = "";
                                }
                        }
                        else controlHijo.Text = "";
                    }
                }
            }
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            this.esEdicion = true;

            btnEditar.Enabled = !esEdicion;
            btnGuardar.Enabled = esEdicion;

            habilitarEdicionCampos(esEdicion);
        }
    }
}